package exercicios.lista.ex05.mbeans;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import exercicios.lista.ex05.model.Anuncio;
import exercicios.lista.ex05.model.Comentario;
import exercicios.lista.ex05.model.Usuario;

@ManagedBean(name="classificados")
@SessionScoped
public class ClassificadosMBean {
	
	private Map<Integer, Anuncio> anuncios = new HashMap<Integer, Anuncio>();
	private Anuncio anuncioDetalhado;
	private String msg = "";
	private Comentario novoComentario = new Comentario();

	public ClassificadosMBean() {
		super();
		testar();
	}
	
	public Map<Integer, Anuncio> getAnuncios() {
		return anuncios;
	}

	public void setAnuncios(Map<Integer, Anuncio> anuncios) {
		this.anuncios = anuncios;
	}
	
	public List<Anuncio> getListaAnuncios() {
		List<Anuncio> lista = new ArrayList<Anuncio>();
		Iterator<Anuncio> it = anuncios.values().iterator();
		while (it.hasNext()) {
			lista.add((Anuncio) it.next());
		}
		return lista;
	}

	public Anuncio getAnuncioDetalhado() {
		return anuncioDetalhado;
	}

	public void setAnuncioDetalhado(Anuncio anuncioDetalhado) {
		this.anuncioDetalhado = anuncioDetalhado;
	}
	
	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public Comentario getNovoComentario() {
		return novoComentario;
	}

	public void setNovoComentario(Comentario novoComentario) {
		this.novoComentario = novoComentario;
	}

	public Anuncio getAnuncioById(int idAnuncio) {
		if (!this.anuncios.containsKey(idAnuncio)) {
			return null;
		}
		return this.anuncios.get(idAnuncio);
	}

	public String atualizarAnuncioDetalhado(){
		FacesContext context = FacesContext.getCurrentInstance();
		Map<String,String> params = context.getExternalContext().getRequestParameterMap();
		int idAnuncioDetalhado = Integer.parseInt(params.get("idAnuncioDetalhado"));
		this.anuncioDetalhado = this.getAnuncioById(idAnuncioDetalhado);
		this.novoComentario.setNomeUsuario("");
		this.novoComentario.setDescricao("");
		return "verDetalhesAnuncio";
	}

	public String registrarComentario(){
		Comentario novo = new Comentario();
		novo.setNomeUsuario(novoComentario.getNomeUsuario());
		novo.setDescricao(novoComentario.getDescricao());
		FacesContext context = FacesContext.getCurrentInstance();
		Map<String,String> params = context.getExternalContext().getRequestParameterMap();
		int idAnuncioComentado = Integer.parseInt(params.get("idAnuncioComentado"));
		this.anuncioDetalhado = this.getAnuncioById(idAnuncioComentado);
		this.anuncioDetalhado.inserirComentario(novo);
		this.novoComentario.setNomeUsuario("");
		this.novoComentario.setDescricao("");
		return "comentarioRegistrado";
	}

	private void testar(){
		Anuncio a1 = new Anuncio();
		Anuncio a2 = new Anuncio();
		Anuncio a3 = new Anuncio();
		Usuario u1 =new Usuario();
		u1.setNome("Fulano de Tal");
		a1.setId(1);
		a1.setDescricao("Descrição do anúncio a1");
		a1.setAnunciante(u1);
		a2.setId(2);
		a2.setDescricao("Descrição do anúncio a2");
		a2.setAnunciante(u1);
		a3.setId(3);
		a3.setDescricao("Descrição do anúncio a3");
		a3.setAnunciante(u1);
		this.anuncios.put(a1.getId(), a1);
		this.anuncios.put(a2.getId(), a2);
		this.anuncios.put(a3.getId(), a3);
	}
}